home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume11 / templates / part01 next >
Encoding:
Internet Message Format  |  1987-10-04  |  50.7 KB

  1. Subject:  v11i091:  Template-mode for GNU Emacs, Part01/06
  2. Newsgroups: comp.sources.unix
  3. Sender: sources
  4. Approved: rs@uunet.UU.NET
  5.  
  6. Submitted-by: "Mark A. Ardis" <maa@sei.cmu.edu>
  7. Posting-number: Volume 11, Issue 91
  8. Archive-name: templates/part01
  9.  
  10. This is the first of six pieces of "template-mode", a minor mode for
  11. GNU Emacs.  Template-mode supports the creation and manipulation of
  12. templates of text.  Templates are useful for boilerplate, idioms, or
  13. anything structural that has concrete syntax.  Included in this
  14. package are templates for C, LaTeX, Pascal, Scribe, and a few other
  15. miscellaneous languages.
  16.  
  17. My biggest regret in distributing template-mode is that it has not
  18. been adequately tested.  It works fine for me, but I have not been
  19. able to generate large test scripts for it, yet.  I expect to continue
  20. to work on this package at my new location.  Please send comments,
  21. suggestions, bugs, etc. to:
  22.  
  23. maa@sei.cmu.edu
  24. or
  25. Mark A. Ardis
  26. Software Engineering Institute
  27. 4500 Fifth Avenue
  28. Pittsburgh, PA 15213
  29. #! /bin/sh
  30. # This is a shell archive, meaning:
  31. # 1. Remove everything above the #! /bin/sh line.
  32. # 2. Save the resulting text in a file.
  33. # 3. Execute the file with /bin/sh (not csh) to create:
  34. #    MANIFEST
  35. #    README
  36. #    INSTALL
  37. #    dir
  38. #    manual.texinfo
  39. #    template.texinfo
  40. export PATH; PATH=/bin:/usr/bin:$PATH
  41. echo shar: "extracting 'MANIFEST'" '(1599 characters)'
  42. if test -f 'MANIFEST'
  43. then
  44.     echo shar: "will not over-write existing file 'MANIFEST'"
  45. else
  46. sed 's/^X//' << \SHAR_EOF > 'MANIFEST'
  47. XFile            Archive         Description
  48. X----            -------         -----------
  49. X
  50. XINSTALL            1            How to get started
  51. XMANIFEST           1            This shipping list
  52. XREADME             1            Description of files
  53. Xawk.el             5            Major mode for awk
  54. Xawk.tpl            6            Templates for awk
  55. Xbib.el             5            Major mode for bibliographies
  56. Xbib.tpl            6            Templates for bibliographies
  57. Xc.tpl              6            Templates for C
  58. Xdir                1            New entry for Info menu
  59. Xelisp.tpl          6            Templates for Emacs Lisp
  60. Xgeneric.tpl        6            Generic templates (always available)
  61. Xlatex.tpl          6            Templates for LaTeX
  62. Xmanual.texinfo     1            TeX wrapper for user manual
  63. Xmenu.el            5            Template-mode -- selection of entries
  64. Xpascal.el          5            Major mode for Pascal
  65. Xpascal.tpl         6            Templates for Pascal
  66. Xscribe.tpl         6            Templates for Scribe
  67. Xsymbol.el          5            Template-mode -- insertion-in-place
  68. Xtemplate.el        2            Root of template-mode
  69. Xtemplate.texinfo   1            User manual
  70. Xtexinfo.tpl        6            Templates for Texinfo
  71. Xtplhelper.el       3            Template-mode -- non-interactive functions
  72. Xtplparse.el        4            Template-mode -- parser
  73. Xtplreplace.el      5            Template-mode -- replacement functions
  74. Xtplscan.el         4            Template-mode -- scanner and unscanner
  75. Xtplvars.el         2            Template-mode -- global variables
  76. SHAR_EOF
  77. if test 1599 -ne "`wc -c < 'MANIFEST'`"
  78. then
  79.     echo shar: "error transmitting 'MANIFEST'" '(should have been 1599 characters)'
  80. fi
  81. fi
  82. echo shar: "extracting 'README'" '(1417 characters)'
  83. if test -f 'README'
  84. then
  85.     echo shar: "will not over-write existing file 'README'"
  86. else
  87. sed 's/^X//' << \SHAR_EOF > 'README'
  88. XThis directory contains the code, data files and documentation for
  89. Xtemplate-mode, a minor mode of GNU Emacs.  The files ending with ".el"
  90. Xare GNU Emacs Lisp files.  Files ending with ".texinfo" are TeX source
  91. Xfiles and Gnuemacs info source files.  Files ending with ".tpl" are
  92. Xsource-form template files.
  93. X
  94. Xawk.el            Major mode for editing "awk" programs
  95. Xbib.el            Major mode for editing bibliography files
  96. Xmenu.el            Template-mode -- major mode for selections
  97. Xpascal.el        Major mode for editing Pascal programs
  98. Xsymbol.el        Template-mode -- major mode for entry-in-place
  99. Xtemplate.el        Root of template-mode
  100. Xtplhelper.el        Template-mode -- non-interactive functions
  101. Xtplparse.el        Template-mode -- Parsing and unparsing functions
  102. Xtplreplace.el        Template-mode -- replacement functions
  103. Xtplscan.el        Template-mode -- scanner and unscanner functions
  104. Xtplvars.el        Template-mode -- global variables and options
  105. Xdir            New part of root directory for Info
  106. Xmanual.texinfo        User manual source -- printed form wrapper
  107. Xtemplate.texinfo    User manual source -- bulk of document
  108. Xawk.tpl            Templates for awk programs
  109. Xbib.tpl            Templates for bibliography files
  110. Xc.tpl            Templates for C-mode
  111. Xelisp.tpl        Templates for Emacs-lisp-mode
  112. Xgeneric.tpl        Templates for use in any mode---mostly Function type
  113. Xlatex.tpl        Templates for LaTeX-mode
  114. Xpascal.tpl        Templates for Pascal-mode
  115. Xscribe.tpl        Templates for Scribe-mode
  116. Xtexinfo.tpl        Templates for Texinfo-mode
  117. SHAR_EOF
  118. if test 1417 -ne "`wc -c < 'README'`"
  119. then
  120.     echo shar: "error transmitting 'README'" '(should have been 1417 characters)'
  121. fi
  122. fi
  123. echo shar: "extracting 'INSTALL'" '(1958 characters)'
  124. if test -f 'INSTALL'
  125. then
  126.     echo shar: "will not over-write existing file 'INSTALL'"
  127. else
  128. sed 's/^X//' << \SHAR_EOF > 'INSTALL'
  129. XThis file describes how to install template-mode, a minor mode of GNU
  130. XEmacs.
  131. X
  132. X1)  Decide where you want to put the template files.  These are data
  133. Xfiles that define the form and content of templates.  Users will
  134. Xprobably want to know where they are, even if all of the load paths
  135. Xare set correctly.  For the purposes of this description, let us call
  136. Xthe directory containing the templates "TEMPLATES".
  137. X
  138. X2)  Find the variable "tpl-load-path" in "tplvars.el" and change its
  139. Xdefault value to:
  140. X
  141. X        (list nil "TEMPLATES")
  142. X
  143. X(The "nil" stands for "default directory", similarly to "load-path".)
  144. X
  145. X3)  Put the template-mode code files ("*.el") in the standard GNU
  146. XEmacs Lisp directory.  (The main problem you want to avoid is failure
  147. Xto "autoload" files.)
  148. X
  149. X4)  Go to a buffer in "Fundamental" mode.  (Actually, any buffer will
  150. Xdo, but this avoids loading some templates twice.)
  151. X
  152. X5)  (load "template.el") -- If you see any messages about missing
  153. Xproperties, then check to make sure that all of the files were loaded.
  154. X(The beginning of "template.el" contains a list of "requires".)  Once
  155. Xyou are satisfied that everything can be "autoloaded", you can
  156. X"byte-compile" all of the source code files.
  157. X
  158. X6)  (template-mode)  -- You should see a message to the effect that no
  159. Xtemplates were found for this mode, and the symbol "Template" should
  160. Xappear in the mode line.
  161. X
  162. X7)  (tpl-recompile-templates) -- This function compiles templates for
  163. Xseveral different modes.  It is not necessary, but will significantly
  164. Xspeed-up loading of standard templates.
  165. X
  166. X8)  (find-file "template.texinfo")
  167. X
  168. X9)  (texinfo-format-buffer) -- Save the results in
  169. X"INFOROOT/template", where "INFOROOT" is the directory containing the
  170. XInfo nodes for GNU Emacs.
  171. X
  172. X10)  Add the menu entry for template-mode found in "dir" to the
  173. Xtop-level menu of the "Info" tree.
  174. X
  175. XYou don't have to compile anything to start using the package.  (In
  176. Xfact, you can stop at step 6.)  See the user manual for a tutorial.
  177. SHAR_EOF
  178. if test 1958 -ne "`wc -c < 'INSTALL'`"
  179. then
  180.     echo shar: "error transmitting 'INSTALL'" '(should have been 1958 characters)'
  181. fi
  182. fi
  183. echo shar: "extracting 'dir'" '(171 characters)'
  184. if test -f 'dir'
  185. then
  186.     echo shar: "will not over-write existing file 'dir'"
  187. else
  188. sed 's/^X//' << \SHAR_EOF > 'dir'
  189. X
  190. X* template: (template).
  191. X        Template-mode provides commands for creating and
  192. X        manipulating "templates"---rectangular regions that
  193. X        correspond to grammatical productions.
  194. SHAR_EOF
  195. if test 171 -ne "`wc -c < 'dir'`"
  196. then
  197.     echo shar: "error transmitting 'dir'" '(should have been 171 characters)'
  198. fi
  199. fi
  200. echo shar: "extracting 'manual.texinfo'" '(665 characters)'
  201. if test -f 'manual.texinfo'
  202. then
  203.     echo shar: "will not over-write existing file 'manual.texinfo'"
  204. else
  205. sed 's/^X//' << \SHAR_EOF > 'manual.texinfo'
  206. X\input texinfo @c -*-texinfo-*-
  207. X@settitle Template-Mode for GNU Emacs
  208. X
  209. X@titlepage
  210. X@sp 10
  211. X@center @titlefont{Template-Mode for GNU Emacs}
  212. X@sp 3
  213. X@center Mark A. Ardis
  214. X@sp 1
  215. X@center Wang Institute of Graduate Studies
  216. X@center Tyngsboro, Massachusetts 01879
  217. X@sp 1
  218. X@center July 31, 1987
  219. X@sp 3
  220. X@center @b{Abstract}
  221. XThis manual describes @i{template-mode}: a set of functions for
  222. Xmanipulating templates of text within GNU Emacs.  Some of the commands
  223. Xinsert and expand templates, while others help you create templates for
  224. Xlater (or immediate) use.
  225. X@end titlepage
  226. X
  227. X@c Include files with actual text
  228. X@include template.texinfo
  229. X
  230. X@c Print the table of contents
  231. X@contents
  232. X
  233. X@bye
  234. SHAR_EOF
  235. if test 665 -ne "`wc -c < 'manual.texinfo'`"
  236. then
  237.     echo shar: "error transmitting 'manual.texinfo'" '(should have been 665 characters)'
  238. fi
  239. fi
  240. echo shar: "extracting 'template.texinfo'" '(41381 characters)'
  241. if test -f 'template.texinfo'
  242. then
  243.     echo shar: "will not over-write existing file 'template.texinfo'"
  244. else
  245. sed 's/^X//' << \SHAR_EOF > 'template.texinfo'
  246. X@setfilename template
  247. X
  248. X@node top, tutorial, (dir), (dir)
  249. X@chapter Introduction to Template-Mode
  250. X
  251. X@dfn{Template-mode} provides commands for inserting and manipulating text.
  252. XIt is particularly useful for inserting standard fragments, such as
  253. Xboilerplate for documents or function headers for programs.  There are
  254. Xtemplates for major program fragments of C, Emacs-Lisp, and Pascal, as well as
  255. Xstandard boilerplate for Scribe and @TeX{} documents.
  256. X
  257. XThe chapter titled ``Tutorial'' explains how to invoke @i{template-mode},
  258. Xand gives a small example.  The ``Commands'' chapter serves as a reference
  259. Xmanual for @i{template-mode} commands.  Options and hooks for modifying the
  260. Xbehavior and appearance of templates are discussed in ``Customization''.
  261. XThe ``Details'' chapter describes the precise syntax of templates and
  262. Xplaceholders.  Finally, the appendices contain excerpts from the template
  263. Xdefinition files.
  264. X
  265. XThe simplest form of templates are rectangular blocks of text.  Some
  266. Xtemplates have @dfn{placeholders} within them.  A placeholder may be
  267. Xreplaced by any object of its type.  For example, @dfn{text} type
  268. Xplaceholders may be replaced by any text string that does not contain a
  269. Xnewline.  Some templates are menu lists of other templates---you must
  270. Xselect one of the items of the list to insert.  Another form of template
  271. Xgenerates a sequence of some other template---you are asked when to stop
  272. Xgenerating.
  273. X
  274. XIn fact, a set of templates defines a context-free grammar.  Each
  275. X@dfn{Sequence} template is a production.  Placeholders represent
  276. Xnonterminals.  The act of inserting and expanding a template is the same as
  277. Xbuilding the derivation tree for the nonterminal on the left side of the
  278. Xproduction.  @dfn{Selection} templates represent nonterminals with more
  279. Xthan one production.  @dfn{Repetition} templates represent productions of
  280. Xthe form @samp{B(AB)*}, where @samp{A} is any terminal string and @samp{B}
  281. Xis any nonterminal.  There are three more types of templates:
  282. X@dfn{Lexical}, @dfn{String} and @dfn{Function}.  Lexical templates are used
  283. Xto describe symbols by regular expressions.  String templates are a special
  284. Xcase of Sequence templates that contain no placeholders (and are parsed
  285. Xfaster).  Function templates provide a mechanism for invoking any
  286. XEmacs-Lisp function during template expansion.
  287. X
  288. XTemplates are defined by a simple syntax and stored in ASCII files.  The
  289. Xstandard templates for use by @i{template-mode} may be found in a directory
  290. Xreferenced by @file{tpl-load-path}.  Files ending with @file{.tpl} are
  291. Xtemplate source files.  Compiled versions are found in files ending with
  292. X@file{tpl.elc}.  You may find it useful to print the @file{.tpl} files for
  293. Xthe languages you use.
  294. X
  295. X@menu
  296. X* tutorial::       A short example.
  297. X* commands::       How to use templates while editing.
  298. X* customization::  How to tailor templates and their commands.
  299. X* details::        Details of template and placeholder syntax
  300. X@end menu
  301. X
  302. X@node tutorial, commands, top, top
  303. X@chapter Tutorial -- A Short Example
  304. X
  305. XIn the example below, the following conventions have been used:
  306. X@itemize @bullet
  307. X@item
  308. XThe first line shows a prompt, or contains @samp{(No prompt)} to show the
  309. Xabsence of prompting.
  310. X
  311. X@item
  312. XThe second, indented line shows your response.  If a carriage return
  313. X(@key{RET}) is required, it will be included in your response.
  314. X@end itemize
  315. XThe Appendices contain the templates described in this example.
  316. X
  317. XFirst, visit @file{sample.el}, and make sure that @i{Emacs-Lisp-Mode} is in
  318. Xeffect.
  319. X
  320. X@table @code
  321. X@item (No prompt)
  322. X@key{ESC} x
  323. X
  324. X@item M-x
  325. X@*
  326. Xload-file @key{RET}
  327. X
  328. X@item Load file:
  329. X@*
  330. Xtemplate @key{RET}
  331. X
  332. X@item (No prompt)
  333. X@key{ESC} x
  334. X
  335. X@item M-x
  336. X@*
  337. Xtemplate-mode @key{RET}
  338. X@end table
  339. X
  340. XAt this point, @i{template-mode} will be initialized.  Completion of
  341. Xinitialization is signalled by the presence of the symbol @code{Template}
  342. Xin the mode line.  If Emacs complains about not finding @file{template},
  343. Xthen you will need to find the absolute path name for this package.  (See
  344. Xyour computer center or a knowledgeable Emacs user.)
  345. X
  346. XYou may want to experiment with the template-generation commands at this
  347. Xpoint, or continue the tutorial on the next page.
  348. X
  349. X@page
  350. X
  351. X@table @code
  352. X@item (No prompt)
  353. X@ctrl{c} @ctrl{t} t
  354. X
  355. X@item generate-template: Name of template?
  356. Xpackage @key{RET}
  357. X
  358. X@item Expand? (y or n)
  359. Xy
  360. X
  361. X@item Expand? (y or n)
  362. Xy
  363. X
  364. X@item Replace <text:documentation> with what?
  365. XSample package @key{RET}
  366. X
  367. X@item Expand? (y or n)
  368. Xn
  369. X
  370. X@item Expand? (y or n)
  371. Xn
  372. X
  373. X@item Keep optional placeholder? (y or n)
  374. Xy
  375. X
  376. X@item Expand? (y or n)
  377. Xn
  378. X
  379. X@item Expand? (y or n)
  380. Xy
  381. X
  382. X@item Expand? (y or n)
  383. Xy
  384. X
  385. X@item Replace <textenter:function-name> with what?
  386. Xreverse @key{RET}
  387. X
  388. X@item Expand? (y or n)
  389. Xy
  390. X
  391. X@item Replace <text:arguments> with what?
  392. Xlist @key{RET}
  393. X
  394. X@item Expand? (y or n)
  395. Xy
  396. X
  397. X@item Type replacement and exit with @key{ESC}-@ctrl{c}.
  398. XReverse the items in LIST. @key{ESC}-@ctrl{c}
  399. X
  400. X@item Expand? (y or n)
  401. Xy
  402. X
  403. X@item Position on selection and exit with Return (or @key{ESC}-@ctrl{c}).
  404. Xx @key{RET}
  405. X
  406. X@item Expand? (y or n)
  407. Xy
  408. X
  409. X@item Replace <text:local-variables> with what?
  410. Xitem @key{RET}
  411. X
  412. X@item Expand? (y or n)
  413. Xy
  414. X
  415. X@item Position on selection and exit with Return (or @key{ESC}-@ctrl{c}).
  416. Xw @key{SPC} @key{RET}
  417. X
  418. X@item Expand? (y or n)
  419. Xy
  420. X
  421. X@item Replace <text:list> with what?
  422. Xlist @key{RET}
  423. X
  424. X@item Expand? (y or n)
  425. Xy
  426. X
  427. X@item Replace <text:item> with what?
  428. Xitem @key{RET}
  429. X
  430. X@item More instances of functions? (y or n)
  431. Xn
  432. X
  433. X@item Done.
  434. X...(You may finish this function now or continue)...
  435. X
  436. X@item (No prompt)
  437. X@ctrl{c} @ctrl{t} @ctrl{p}
  438. X
  439. X@item (No prompt)
  440. X@ctrl{c} @ctrl{t} @ctrl{k}
  441. X
  442. X@item (No prompt)
  443. X@key{ESC} <
  444. X
  445. X@item Mark set
  446. X@*
  447. X@ctrl{c} @ctrl{t} @ctrl{e}
  448. X
  449. X@item Expand? (y or n)
  450. Xy
  451. X
  452. X@item Expand? (y or n)
  453. Xy
  454. X@end table
  455. X@page
  456. X
  457. XFor a shorter (i.e., fewer keystrokes) incantation of this example, try
  458. Xsetting two options:
  459. X@table @code
  460. X@item tpl-keep-optional-placeholders
  461. XSetting this to @code{nil} will automatically delete optional placeholders
  462. Xin templates.
  463. X
  464. X@item tpl-ask-expansion-depth
  465. XSetting this to @code{4} will automatically begin expansion of
  466. Xplaceholders, until the depth of recursive expansions reaches 4.
  467. X@end table
  468. X@noindent
  469. XExpanding the @code{package} template should take fewer keystrokes after
  470. Xthese changes.
  471. X
  472. X@node commands, customization, tutorial, top
  473. X@chapter Commands -- How to Use Templates While Editing
  474. X
  475. XThis chapter serves as a reference to all of the @i{template-mode} commands.
  476. XThe first section briefly describes each command.  Following sections cover
  477. Xcommands by topic, such as selecting or expanding templates.
  478. X
  479. X@menu
  480. X* summary::        Short description of all the commands.
  481. X* loading::        Initialization of template-mode.
  482. X* selecting::      Choosing the right template.
  483. X* expanding::      Replacing placeholders by templates or text.
  484. X* menus::          Selection of choices -- Menu-Mode.
  485. X* symbols::        Short expressions as parameters to templates.
  486. X* textlong::       Large blocks of text as parameters to templates.
  487. X* wrapping::       Weak parsing to manipulate enclosing templates.
  488. X* searching::      Finding and replacing template instances.
  489. X* aborting::       How to stop or quit.
  490. X* creating::       How to create your own templates.
  491. X@end menu
  492. X
  493. X@node summary, loading, commands, commands
  494. X@section Summary -- Short description of all the commands
  495. X
  496. XHere is a short description of all of the @i{template-mode} commands:
  497. X
  498. X@table @code
  499. X@item add-symbol (@ctrl{c} @ctrl{t} a)
  500. XAdd the symbol before point to the list of symbols created by
  501. X@i{textenter} placeholders.
  502. X
  503. X@item compile-templates (unbound)
  504. XStore the templates in a form that allows faster loading.
  505. X
  506. X@item delete-placeholder (@ctrl{c} @ctrl{t} @ctrl{k})
  507. XDelete the placeholder at point.
  508. X
  509. X@item describe-template-mode (@ctrl{c} @ctrl{t} @ctrl{h})
  510. XGive a brief description of template-mode.
  511. X
  512. X@item expand-placeholder (@ctrl{c} @ctrl{t} e)
  513. XExpands the placeholder at point with its template description.
  514. X
  515. X@item expand-placeholders-in-region (@ctrl{c} @ctrl{t} @ctrl{e})
  516. XExpands all placeholders in the region with their template descriptions.
  517. X
  518. X@item expand-symbol (@ctrl{c} @ctrl{t} @key{TAB})
  519. XExpand the symbol before point using the list of symbols created by
  520. X@i{textenter} placeholders.
  521. X
  522. X@item generate-any-template (@ctrl{c} @ctrl{t} ?)
  523. XBuilds a list of all the templates available, and waits for selection.
  524. X
  525. X@item generate-template (@ctrl{c} @ctrl{t} t)
  526. XPrompts for the name of a template and then inserts it at point.
  527. XPlaceholders within the template are expanded interactively.
  528. X
  529. X@item load-tpl-buffer (unbound)
  530. XAdd a new buffer of templates to the working set.  (Only understands text
  531. Xform of templates.  Uses standard buffer name completion, with default
  532. X@file{new.tpl}.)
  533. X
  534. X@item load-tpl-file (unbound)
  535. XAdd a new file of templates to the working set.  (Only understands text
  536. Xform of templates, and uses standard file name completion.)
  537. X
  538. X@item load-tpl-library (unbound)
  539. XAdd a new file of templates to the working set.  (Understands both text and
  540. Xcompiled forms of templates, and uses the @i{tpl-load-path} variable to
  541. Xfind the file.)
  542. X
  543. X@item looking-at-tpl (unbound)
  544. XReturns @i{true} if the named template follows point.
  545. X
  546. X@item next-placeholder (@ctrl{c} @ctrl{t} @ctrl{n})
  547. XMove to the beginning of the next placeholder.
  548. X
  549. X@item previous-placeholder (@ctrl{c} @ctrl{t} @ctrl{p})
  550. XMove to the beginning of the previous placeholder.
  551. X
  552. X@item query-replace-groups  (@ctrl{c} @ctrl{t} g)
  553. XReplace instances of groups of lines (matched by regular expressions) with
  554. Xplaceholders.
  555. X
  556. X@item query-replace-lines  (@ctrl{c} @ctrl{t} l)
  557. XReplace lines with placeholders.
  558. X
  559. X@item query-replace-tpl (unbound)
  560. XReplace instances of one template with corresponding instances of another.
  561. X
  562. X@item region-to-tpl (unbound)
  563. XDefine a template, using the current region of text.
  564. X
  565. X@item replace-line-with-placeholder (@ctrl{c} @ctrl{t} r)
  566. XReplace the current line with a placeholder.
  567. X
  568. X@item replace-region-with-placeholder (@ctrl{c} @ctrl{t} @ctrl{r})
  569. XReplace the current region with a placeholder.
  570. X
  571. X@item replace-tpl (unbound)
  572. XReplace one instance of a template with a corresponding instance of another.
  573. X
  574. X@item rewrap-template-around-point (@ctrl{c} @ctrl{t} @ctrl{u})
  575. XUnwrap and then wrap.  (See those two commands.)
  576. X
  577. X@item search-forward-tpl (unbound)
  578. XSearch for an instance of a template.
  579. X
  580. X@item template-mode (unbound)
  581. XTurns @i{template-mode} on and off.
  582. X
  583. X@item unwrap-template-around-point (@ctrl{c} @ctrl{t} u)
  584. XFind the nearest enclosing instance of the named template and remove it,
  585. Xkeeping the text that matches its destination placeholder.
  586. X
  587. X@item wrap-template-around-line (@ctrl{c} @ctrl{t} W)
  588. XUse the current line to replace the destination placeholder of a
  589. Xplaceholder.
  590. X
  591. X@item wrap-template-around-region (@ctrl{c} @ctrl{t} @ctrl{w})
  592. XUse the current region to replace the destination placeholder of a
  593. Xplaceholder.
  594. X
  595. X@item wrap-template-around-word (@ctrl{c} @ctrl{t} w)
  596. XUse the current word to replace the destination placeholder of a
  597. Xplaceholder.
  598. X@end table
  599. X
  600. X@node loading, selecting, summary, commands
  601. X@section Loading templates -- initialization of template-mode
  602. X
  603. X@table @code
  604. X@item load-tpl-buffer (unbound)
  605. XAdd a new buffer of templates to the working set.  (Only understands text
  606. Xform of templates.  Uses standard buffer name completion, with default
  607. X@file{new.tpl}.)
  608. X
  609. X@item load-tpl-file (unbound)
  610. XAdd a new file of templates to the working set.  (Only understands text
  611. Xform of templates, and uses standard file name completion.)
  612. X
  613. X@item load-tpl-library (unbound)
  614. XAdd a new file of templates to the working set.  (Understands both text and
  615. Xcompiled forms of templates, and uses the @i{tpl-load-path} variable to
  616. Xfind the file.)
  617. X@end table
  618. X
  619. XBefore a template may be used, it must be loaded.  Standard templates are
  620. Xloaded by checking the major mode of the current buffer.  (E.g., the
  621. X@file{ctpl.elc} file is loaded if the major mode is ``C''.)  You may load as
  622. Xmany template files as you wish, in as many buffers as you wish.  Each
  623. X@i{template-mode} buffer has its own set of template files.  Since many
  624. Xtemplate files use similar names for templates (e.g., @samp{stmt} occurs in
  625. Xmost), it is probably a good idea to start with only the standard template
  626. Xfiles at first.
  627. X
  628. XAlthough templates are created as text, they are converted into an internal
  629. XLisp structure when they are loaded.  This conversion process may be saved
  630. Xby compiling the templates and storing the compiled form.  The
  631. X@b{load-tpl-library} command is capable of reading these compiled forms,
  632. Xwhich is a faster method than reading the ASCII text forms.  The
  633. X@b{load-tpl-file} and @b{load-tpl-buffer} commands only understand ASCII
  634. Xtext forms.  Also, @b{load-tpl-library} uses the value of @b{tpl-load-path}
  635. Xto find the file, whereas @b{load-tpl-file} and @b{load-tpl-buffer} use
  636. Xstandard name completion.
  637. X
  638. X@node selecting, expanding, loading, commands
  639. X@section Selecting templates -- choosing the right template
  640. X
  641. X@table @code
  642. X@item generate-any-template (@ctrl{c} @ctrl{t} ?)
  643. XBuilds a list of all the templates available, and waits for selection.
  644. X
  645. X@item generate-template (@ctrl{c} @ctrl{t} t)
  646. XPrompts for the name of a template and then inserts it at point.
  647. XPlaceholders within the template are expanded interactively.
  648. X@end table
  649. X
  650. XThe @b{generate-any-template} (@ctrl{c} @ctrl{t} ?) command builds a list
  651. Xof all the available templates and waits for a selection.  Since the list
  652. Xmay be quite long, it is probably best to select via the unique-prefix
  653. Xmethod: Type enough of the beginning of a template name to uniquely
  654. Xidentify it.  Point will be positioned as if an incremental search were
  655. Xbeing performed.  Typing a @key{RET} will select an entry.  Once the
  656. Xselection has been made, generation proceeds by inserting a placeholder and
  657. Xexpanding it.
  658. X
  659. XThe @b{generate-template} (@ctrl{c} @ctrl{t} t) command requests the name
  660. Xof a template to insert and expand.  Unambiguous prefixes may be completed
  661. Xwith the @key{TAB} key.  If no such template exists, you will get an error
  662. Xmessage, and an error result.  Otherwise, a placeholder for the requested
  663. Xtemplate will be inserted and expansion will begin.
  664. X
  665. X@node expanding, menus, selecting, commands
  666. X@section Expanding templates -- replacing placeholders by templates
  667. X
  668. X@table @code
  669. X@item delete-placeholder (@ctrl{c} @ctrl{t} @ctrl{k})
  670. XDelete the placeholder at point.
  671. X
  672. X@item expand-placeholder (@ctrl{c} @ctrl{t} e)
  673. XExpands the placeholder at point with its template description.
  674. X
  675. X@item expand-placeholders-in-region (@ctrl{c} @ctrl{t} @ctrl{e})
  676. XExpands all placeholders in the region with their template descriptions.
  677. X
  678. X@item next-placeholder (@ctrl{c} @ctrl{t} @ctrl{n})
  679. XMove to the beginning of the next placeholder.
  680. X
  681. X@item previous-placeholder (@ctrl{c} @ctrl{t} @ctrl{p})
  682. XMove to the beginning of the previous placeholder.
  683. X@end table
  684. X
  685. XExpansion of a placeholder consists of:
  686. X@enumerate
  687. X@item
  688. XFinding the appropriate template.
  689. X@item
  690. XInserting the template in place of the placeholder.
  691. X@item
  692. XDetermining the appropriate final destination of @i{point}
  693. X(including removing all destination placeholders).
  694. X@item
  695. XRecursively expanding each placeholder within the new text.
  696. X@item
  697. XLeaving @i{point} at the appropriate final destination.
  698. X@end enumerate
  699. XYou may choose not to expand any placeholder, in which case it is left
  700. Xas-is in the buffer.  The command @b{expand-placeholder} (@ctrl{c} @ctrl{t}
  701. Xe) may be used to expand the placeholder at the current location of point.
  702. XThe commands @b{next-placeholder} (@ctrl{c} @ctrl{t} @ctrl{n}),
  703. X@b{previous-placeholder} (@ctrl{c} @ctrl{t} @ctrl{p}), and
  704. X@b{delete-placeholder} (@ctrl{c} @ctrl{t} @ctrl{k}) are also useful when
  705. Xcleaning up unexpanded placeholders.  @b{Expand-placeholders-in-region}
  706. X(@ctrl{c} @ctrl{t} @ctrl{e}) will expand all of the placeholders in a
  707. Xregion, recursively.
  708. X
  709. XPlaceholders may be optional or required.  An optional placeholder has an
  710. Xextra @samp{#} character at the beginning of its type name.  When expanding
  711. Xa template containing an optional placeholder you are asked whether you
  712. Xwish to keep the placeholder.  If you respond negatively, the placeholder
  713. Xis deleted.  If you respond positively, the placeholder is changed into a
  714. Xrequired placeholder (i.e., the extra @samp{#} is removed).  For each
  715. Xrequired placeholder you are asked if you wish to expand it.
  716. X
  717. XThe type of a placeholder (the part before the @samp{:}) may be a template
  718. Xname, one of the @dfn{text} types (@dfn{text}, @dfn{textenter} or
  719. X@dfn{textlong}), or the special @dfn{destination} type.  Expansion of
  720. X@i{text} type placeholders is discussed in a later section.  If the type is
  721. Xa template name, that template will be inserted in place of the
  722. Xplaceholder, and each of its placeholders will be expanded.  (If the
  723. Xtemplate cannot be found an error will result.)  Destination placeholders
  724. Xare removed after inserting the containing template.  They are used to
  725. Xselect the final destination of @i{point}.  (The location of the first
  726. Xdestination placeholder is used if at least one such placeholder is found,
  727. Xotherwise the end of the template is used for the final destination.)
  728. XNotice that expansion of placeholders and templates can be nested.
  729. X
  730. X@node menus, symbols, expanding, commands
  731. X@section Menu-mode -- selection of choices
  732. X
  733. XIf the template you request is of type @dfn{selection}, a menu will be
  734. Xconstructed in a separate window, and you will be asked to pick one of the
  735. Xentries.  You may move about in this window with any of the normal movement
  736. Xcommands, but you will be prevented from modifying the buffer.  The
  737. X@key{SPC} key advances to the next line.  Alphabetic characters invoke an
  738. Xincremental search that is anchored at the left side of the line.  Thus,
  739. Xyou may go to a particular entry by typing an unambiguous prefix of that
  740. Xentry.
  741. X
  742. XTo exit the menu type a @key{RET}.  (Actually, @b{exit-recursive-edit} will
  743. Xwork, also.)  If you do not like any of the choices, type a @ctrl{g} to
  744. Xabort the command.  You can use @b{advertised-undo} to clean up.
  745. X
  746. X@node symbols, textlong, menus, commands
  747. X@section Symbol-mode -- short expressions as parameters to templates
  748. X
  749. X@table @code
  750. X@item add-symbol (@ctrl{c} @ctrl{t} a)
  751. XAdd the symbol before point to the list of symbols created by
  752. X@i{textenter} placeholders.
  753. X
  754. X@item expand-symbol (@ctrl{c} @ctrl{t} @key{TAB})
  755. XExpand the symbol before point using the list of symbols created by
  756. X@i{textenter} placeholders.
  757. X@end table
  758. X
  759. XExpansion of a @i{text} placeholder is accomplished by insertion-in-place.
  760. XIn fact, a special mode is used for this, which restricts text modification
  761. Xcommands to operate within a single line.  The @key{TAB} key is used to
  762. Xinvoke completion.  It works similarly to command completion, except that
  763. Xit uses an identifier table constructed by @i{textenter} placeholder
  764. Xexpansions.  A newline finishes the entry and exits the mode.  Once the
  765. Xvalue of a @i{text} placeholder has been completed, every identical
  766. Xplaceholder within the current template expansion is replaced by this
  767. Xvalue.
  768. X
  769. XExpansion of a @i{textenter} placeholder is the same as for @i{text},
  770. Xexcept that the entry is saved in the identifier table when it is
  771. Xcompleted.
  772. XYou may add entries to this table with the @b{add-symbol}
  773. Xcommand (@ctrl{c} a)---it adds
  774. Xthe symbol before point to the table.
  775. X@b{Expand-symbol} (@ctrl{c} @key{TAB}) expands
  776. Xpartial symbols using this table.
  777. X
  778. X@node textlong, wrapping, symbols, commands
  779. X@section Textlong -- large blocks of text as parameters to templates
  780. X
  781. XExpansion of a @dfn{textlong} placeholder creates a separate window for
  782. Xcreation of the entry.  You must use @b{exit-recursive-edit} (@key{ESC}
  783. X@ctrl{c}) to complete the entry and return to the original buffer.
  784. X
  785. X@node wrapping, searching, textlong, commands
  786. X@section Wrapping -- weak parsing to manipulate enclosing templates
  787. X
  788. X@table @code
  789. X@item rewrap-template-around-point (@ctrl{c} @ctrl{t} @ctrl{u})
  790. XUnwrap and then wrap.  (See those two commands.)
  791. X
  792. X@item unwrap-template-around-point (@ctrl{c} @ctrl{t} u)
  793. XFind the nearest enclosing instance of the named template and remove it,
  794. Xkeeping the text that matches its destination placeholder.
  795. X
  796. X@item wrap-template-around-line (@ctrl{c} @ctrl{t} W)
  797. XUse the current line to replace the destination placeholder of a
  798. Xplaceholder.
  799. X
  800. X@item wrap-template-around-region (@ctrl{c} @ctrl{t} @ctrl{w})
  801. XUse the current region to replace the destination placeholder of a
  802. Xplaceholder.
  803. X
  804. X@item wrap-template-around-word (@ctrl{c} @ctrl{t} w)
  805. XUse the current word to replace the destination placeholder of a
  806. Xplaceholder.
  807. X@end table
  808. X
  809. XThe wrap and unwrap commands provide a weak form of parsing that arises
  810. Xoften: the recognition of enclosing templates.  For example, many document
  811. Xprocessors require begin/end pairs of commands or delimiters to change the
  812. Xnature of processing within a region.  These pairs are easily encoded as
  813. Xtemplates, with an empty middle part represented by a destination
  814. Xplaceholder.  This form of template is called a @dfn{wrapper}.
  815. X
  816. XTo wrap a region of text, use any of the commands:
  817. X@b{wrap-template-around-line} (@ctrl{c} @ctrl{t} W),
  818. X@b{wrap-template-around-region} (@ctrl{c} @ctrl{t} @ctrl{w}), or
  819. X@b{wrap-template-around-word} (@ctrl{c} @ctrl{t} w).  The line and word
  820. Xforms take a prefix argument of the number of lines or words (default = 1).
  821. XTo unwrap a region of text, use the @b{unwrap-template-around-point}
  822. X(@ctrl{c} @ctrl{t} u) command.  Note that this command tries to understand
  823. Xindentation, but may guess incorrectly.  The
  824. X@b{rewrap-template-around-point} (@ctrl{c} @ctrl{t} @ctrl{u}) command
  825. Xcombines unwrapping with wrapping a region.  It is particularly useful when
  826. Xediting existing text to change the formatting style.
  827. X
  828. X@node searching, aborting, wrapping, commands
  829. X@section Searching -- finding and replacing template instances
  830. X
  831. X@table @code
  832. X@item looking-at-tpl (unbound)
  833. XReturns @i{true} if the named template follows point.
  834. X
  835. X@item search-forward-tpl (unbound)
  836. XFind the next occurrence of a template.
  837. X
  838. X@item replace-tpl (unbound)
  839. XReplace an instance of a template.
  840. X
  841. X@item query-replace-tpl (unbound)
  842. XReplace instances of templates, querying for actions on each instance.
  843. X@end table
  844. X
  845. XTemplates may be used in search and replacement operations, similarly to
  846. Xregular expressions.  There are currently no backward-search operations.
  847. XAll of these commands take template names for arguments.  So, you will have
  848. Xto define any non-standard templates (i.e., any templates not in the
  849. Xstandard libraries) before using them.
  850. X
  851. X@b{Looking-at-tpl} returns @code{t} if @i{point} is immediately followed by
  852. Xan instance of the specified template.  Otherwise, it returns @code{nil}.
  853. X@b{Search-forward-tpl} advances point to the end of the next instance of
  854. Xthe named template.  If no match is found, point advances to the end of the
  855. Xbuffer.  The matching algorithm assumes that templates are rectangular, and
  856. Xuses indentation for clues in parsing.  If the text to be matched differs
  857. Xsignificantly in indentation from the template, then the matching algorithm
  858. Xmay be fooled or confused.
  859. X
  860. X@b{Replace-tpl} replaces the source template instance at point with
  861. Xa corresponding instance of the object template.
  862. XCurrently, the interpretation of ``corresponding'' is:
  863. X@itemize @bullet
  864. X@item
  865. XFor each placeholder in the object template, the first identically-named
  866. Xplaceholder from the source template is used.
  867. X
  868. X@item
  869. XIndentation of the text that matches a placeholder is adjusted rigidly to
  870. Xits new position.
  871. X@end itemize
  872. XThe method of parsing templates is quite primitive, but effective.  Literal
  873. Xcharacters are matched exactly, whitespace is matched loosely, and
  874. Xplaceholders are matched by assistance of the user.  (The user is asked to
  875. Xposition @i{point} at the end of the matching instance.)
  876. X
  877. X@b{Query-replace-tpl} behaves like @b{query-replace}, except that
  878. X@b{search-forward-tpl} and @b{replace-tpl} are used instead of
  879. X@b{search-forward} and @b{replace-string}.
  880. X
  881. X@node aborting, creating, searching, commands
  882. X@section Aborting -- how to stop or quit
  883. X
  884. XIf at any time you wish to abort, type @ctrl{g}.  This will stop the
  885. Xcurrent command and return you to normal editing.  You may use
  886. X@i{advertised-undo} (@ctrl{x} u) to restore the buffer to a reasonable
  887. Xstate.
  888. X
  889. XIf you appear to be in a recursive-edit (denoted by @samp{[...]} around
  890. Xpart of the mode line), use @b{exit-recursive-edit} (@key{ESC} @ctrl{c}) to
  891. Xexit.
  892. X
  893. X@node creating, , aborting, commands
  894. X@section Creating -- how to create your own templates
  895. X
  896. X@table @code
  897. X@item compile-templates (unbound)
  898. XStore the templates in a form that allows faster loading.
  899. X
  900. X@item query-replace-groups  (@ctrl{c} @ctrl{t} g)
  901. XReplace instances of groups of lines (matched by regular expressions) with
  902. Xplaceholders.
  903. X
  904. X@item query-replace-lines  (@ctrl{c} @ctrl{t} l)
  905. XReplace lines with placeholders.
  906. X
  907. X@item region-to-tpl (unbound)
  908. XDefine a template, using the current region of text.
  909. X
  910. X@item replace-line-with-placeholder (@ctrl{c} @ctrl{t} r)
  911. XReplace the current line with a placeholder.
  912. X
  913. X@item replace-region-with-placeholder (@ctrl{c} @ctrl{t} @ctrl{r})
  914. XReplace the current region with a placeholder.
  915. X@end table
  916. X
  917. XOne way to create new templates is with @b{replace-region-with-placeholder}
  918. X(@ctrl{c} @ctrl{t} @ctrl{r}) or @b{replace-line-with-placeholder} (@ctrl{c}
  919. X@ctrl{t} r).  These commands define a new template with the current region
  920. Xor line as the template body.  You may edit this template by moving to the
  921. X@file{new.tpl} buffer (or whatever name you supplied when requested).  If
  922. Xyou change the template after creating it, you must save the buffer and
  923. Xreload the file in order to use the new definition.  @b{Region-to-tpl} may
  924. Xbe used to begin creation of a template with the current region.
  925. X
  926. X@b{Query-replace-lines} (@ctrl{c} @ctrl{t} l) and @b{query-replace-groups}
  927. X(@ctrl{c} @ctrl{t} g) may be used to iteratively perform the actions of
  928. X@b{replace-region-with-placeholder} for lines or groups of lines matching a
  929. Xgiven regular expression.  These commands are particularly valuable for
  930. Xmoving blocks of text as templates.  For example, you can replace function
  931. Xdefinitions by placeholders with the same names as the functions.  Sorting
  932. Xthe placeholders and expanding results in a file of functions sorted by
  933. Xfunction names.
  934. X
  935. XSince a template file is just a special ASCII file, you may create it any
  936. Xway you wish.  There is no need to compile template files.  If you do use
  937. X@b{compile-templates}, keep in mind that only @b{load-tpl-library}
  938. Xunderstands this special form.  Compiling templates results in faster
  939. Xloading, but no faster generation or expansion.
  940. X
  941. XA stack of template files is kept for each buffer.  So, you may define your
  942. Xown personal versions of templates in a file and load them after invoking
  943. X@i{template-mode}.  The newly loaded versions (your versions) will
  944. Xover-ride the previous definitions.  There is currently no method available
  945. Xfor ``unloading'' template files.
  946. X
  947. X@node customization, details, commands, top
  948. X@chapter Customization of Templates and Their Commands
  949. X
  950. XOptions for customizing @i{template-mode} fall into four categories:
  951. Xcommand behavior, display strings, file names, and template syntax.  (See
  952. Xthe GNU Emacs Manual for help in modifying options, which are also called
  953. X``variables''.)  Most @i{template-mode} options are global variables.
  954. X
  955. X@menu
  956. X* behavior::    Options for customizing command behavior
  957. X* display::    Special display strings
  958. X* files::    Names of files used
  959. X* syntax::    Patterns and strings in template definitions
  960. X* hooks::    User-defined functions to change behavior
  961. X@end menu
  962. X
  963. X@node behavior, display, customization, customization
  964. X@section Behavior -- options for customizing command behavior
  965. X
  966. XOptions in this category are used to tailor the behavior of template
  967. Xgeneration and expansion.
  968. X
  969. X@table @code
  970. X@item tpl-ask-expansion-depth (1)
  971. XDepth of recursive placeholder expansions at which to start asking
  972. Xwhether to expand.  Defaults to 1, which means always ask.
  973. X
  974. X@item auto-load-new-templates (nil)
  975. XOption to automatically load new templates created with
  976. X@code{replace-with-placeholder}.  Otherwise, @code{load-tpl-file} must be
  977. Xused.
  978. X
  979. X@item auto-save-new-templates (nil)
  980. XOption to automatically save new templates created with
  981. X@code{replace-with-placeholder}.  Otherwise, @code{save-buffer} must be
  982. Xused.
  983. X
  984. X@item tpl-expand-placeholders (t)
  985. XTemplate-mode expansion option: if non-nil (default=t), expand placeholders
  986. Xafter inserting them.
  987. X
  988. X@item tpl-fill-while-unscanning (nil)
  989. XOption to fill (if auto-fill is turned on) while unscanning (inserting)
  990. Xtemplates. Otherwise, templates are inserted as-is.
  991. X
  992. X@item tpl-form-placeholder-name-from-context (nil)
  993. XOption to generate placeholder names by looking for the first symbol after
  994. Xpoint.  If nil, temporary names are used, instead.  (This option is useful
  995. Xwhen invoking @code{query-replace-groups}.)
  996. X
  997. X@item tpl-get-placeholder-name-in-context (t)
  998. XOption to allow the user to create placeholder names in context (using
  999. X@i{Symbol} mode).  Otherwise, temporary names are used.
  1000. X
  1001. X@item tpl-include-prefix-in-groups (t)
  1002. XOption to include the prefix string used to identify groups (when using
  1003. X@code{query-replace-groups}) in the group.  Otherwise, the group begins
  1004. X@i{after} the identifying prefix string.
  1005. X
  1006. X@item tpl-indentation-size (2)
  1007. XSize of indentation units in columns.
  1008. X
  1009. X@item tpl-keep-optional-placeholders (``ask'')
  1010. XOption to determine processing of optional placeholders in template-mode.
  1011. XIf t, then always keep them.  If nil, then always delete them.  If neither
  1012. Xt nor nil, then always ask.
  1013. X
  1014. X@item tpl-literal-whitespace (nil)
  1015. XOption to preserve leading whitespace when defining new templates.
  1016. XOtherwise, calculate relative indentation units.
  1017. X
  1018. X@item tpl-rebuild-all-templates-template (nil)
  1019. XOption to rebuild the list of all templates after loading new templates
  1020. X(including initial loading).  Otherwise, the list must be built on demand.
  1021. X
  1022. X@item tpl-save-identifier-file (nil)
  1023. XOption to keep identifier table (created with ``textenter'' placeholders)
  1024. Xin a file.
  1025. X
  1026. X@item tpl-verify-end-of-group (nil)
  1027. XOption to verify (by positioning @i{point}) the end of each group when
  1028. Xusing @code{query-replace-groups}.
  1029. X@end table
  1030. X
  1031. X@node display, files, behavior, customization
  1032. X@section Display -- special display strings
  1033. X
  1034. XOptions in this category are used to tailor the appearance of delimiters
  1035. Xcreated by @i{template-mode}.
  1036. X
  1037. X@table @code
  1038. X@item sym-end-display (``<<'')
  1039. XDisplay marker after string to be created in symbol mode.
  1040. X
  1041. X@item sym-start-display (``>>'')
  1042. XDisplay marker before string to be created in symbol mode.
  1043. X
  1044. X@item tpl-display-begin (``>>'')
  1045. XDelimiter marking beginning of a selected placeholder.
  1046. X
  1047. X@item tpl-display-end (``<<'')
  1048. XDelimiter marking end of a selected placeholder.
  1049. X@end table
  1050. X
  1051. X@node files, syntax, display, customization
  1052. X@section Files -- names of files
  1053. X
  1054. XOptions in this category consist of file and directory names used by
  1055. X@i{template-mode}.
  1056. X
  1057. X@table @code
  1058. X@item auto-template-alist (nil)
  1059. XGlobal list of major modes and their associated template files.  It is
  1060. Xinitialized by @code{tpl-initialize-modes}.
  1061. X
  1062. X@item tpl-load-path (nil ...)
  1063. XA list of directories to search when looking for templates.
  1064. XNil means look in the current directory.
  1065. X
  1066. X@item tpl-new-template-buffer (``new.tpl'')
  1067. XBuffer containing new templates.
  1068. X@end table
  1069. X
  1070. X@node syntax, hooks, files, customization
  1071. X@section Syntax -- patterns and strings in template definitions
  1072. X
  1073. XOptions in this category consist of regular expressions and strings used to
  1074. Xdefine templates.  There are several options that may be changed, but most
  1075. Xshould be left alone.  Since regular expression search is used quite often,
  1076. Xone should not use characters that are special to regular expressions in
  1077. Xdelimiters.  For example, the use of @samp{*} in any of the delimiters is
  1078. Xsure to cause problems.
  1079. X
  1080. X@table @code
  1081. X@item tpl-begin-placeholder (``<'')
  1082. XRegular expression for beginning of placeholder.
  1083. X
  1084. X@item tpl-begin-template-body (``^:begin'')
  1085. XRegular expression for beginning of template body.
  1086. X
  1087. X@item tpl-begin-template-definition (``^Template'')
  1088. XRegular expression for beginning of template definition.
  1089. X
  1090. X@item tpl-destination-symbol (``POINT'')
  1091. XSpecial placeholder name used as destination of point after expansion.
  1092. X
  1093. X@item tpl-end-placeholder (``>'')
  1094. XRegular expression for end of placeholder.
  1095. X
  1096. X@item tpl-end-template-body (``^:end'')
  1097. XRegular expression for end of template body.
  1098. X
  1099. X@item tpl-function-type (``Function'')
  1100. XName of function-type template type.
  1101. X
  1102. X@item tpl-lexical-type (``Lexical'')
  1103. XName of lexical-type template type.
  1104. X
  1105. X@item tpl-next-placeholder-number (1)
  1106. XCounter used to generate temporary placeholder names.
  1107. X
  1108. X@item tpl-pattern-optional (``#'')
  1109. XRegular expression for optional placeholder delimiter.
  1110. X
  1111. X@item tpl-pattern-other (``.'')
  1112. XRegular expression for all other tokens.
  1113. X
  1114. X@item tpl-pattern-placeholder (too complicated to print)
  1115. XRegular expression for placeholder---built from component parts above.
  1116. X
  1117. X@item tpl-pattern-punctuation (``\\s.+'')
  1118. XRegular expression for at least one punctuation character.
  1119. X
  1120. X@item tpl-pattern-string (.*)
  1121. XRegular expression for each line of string-type templates.
  1122. X
  1123. X@item tpl-pattern-symbol (``\\(\\sw\\|\\s_\\)+'')
  1124. XRegular expression for at least one symbol character.
  1125. X
  1126. X@item tpl-pattern-whitespace (too complicated to print)
  1127. XRegular expression for at least one whitespace character.
  1128. X
  1129. X@item tpl-pattern-word (``\\sw+'')
  1130. XRegular expression for at least one word character.
  1131. X
  1132. X@item tpl-repetition-type (``Repetition'')
  1133. XName of repetition-type template type.
  1134. X
  1135. X@item tpl-selection-type (``Selection'')
  1136. XName of selection-type template type.
  1137. X
  1138. X@item tpl-sep-placeholder (``:'')
  1139. XRegular expression for separator within placeholder.
  1140. X
  1141. X@item tpl-sequence-type (``Sequence'')
  1142. XName of sequence-type template type.
  1143. X
  1144. X@item tpl-string-type (``String'')
  1145. XName of string-type template type.
  1146. X
  1147. X@item tpl-temporary-placeholder-name (``TEMP'')
  1148. XRoot of temporary placeholder names.
  1149. X@end table
  1150. X
  1151. X@node hooks, , syntax, customization
  1152. X@section Hooks -- user-defined functions to change behavior
  1153. X
  1154. X@table @code
  1155. X@item sym-check-validity-hook
  1156. XThis hook may be used to check the validity of expansions of @i{text} and
  1157. X@i{textenter} placeholders.  It is temporarily replaced by an appropriate
  1158. Xfunction for @i{lexical} placeholders.
  1159. X
  1160. X@item template-mode-hook
  1161. XThis hook is called when @i{template-mode} is turned on.
  1162. X
  1163. X@item template-mode-load-hook
  1164. XThis hook is called when @i{template-mode} is loaded.  (Loading includes
  1165. Xinitialization of the global list of template files to use for different
  1166. Xmodes.  This hook is useful for altering that list.)
  1167. X
  1168. X@item template-scan-hook
  1169. XThis hook is called before attempting to scan for an instance of a
  1170. Xtemplate.  Reformatting with this hook may make it easier to find instances
  1171. Xof templates.
  1172. X
  1173. X@item template-unscan-hook
  1174. XThis hook is called after unscanning (inserting) a template.  Reformatting
  1175. Xwith this hook may be useful.
  1176. X@end table
  1177. X
  1178. X@node details, appendixa, customization, top
  1179. X@chapter Details -- Template and Placeholder Syntax
  1180. X
  1181. XThis chapter covers all the details of template syntax for those who wish
  1182. Xto create their own template files.  Note that the concrete syntax for
  1183. Xtemplate definitions may be changed through several user options (e.g.,
  1184. X@code{tpl-begin-template-body}).  These options are usually local
  1185. Xvariables, so that different template files may have different syntax.
  1186. XHowever, it is best not to modify the syntax of placeholders (even though
  1187. Xthere are options for doing this), since placeholders usually span template
  1188. Xfiles.
  1189. X
  1190. XA template file consists of a sequence of individual template definitions.
  1191. XEach definition has the form:
  1192. X@example
  1193. XTemplate <template-name> <template-type>
  1194. X:begin
  1195. X<template-body>
  1196. X:end
  1197. X@end example
  1198. XNote that the newline at the very end of the template definition is @i{not}
  1199. Xpart of the template body.  The contents and interpretation of the template
  1200. Xbody differ depending on template type.  In general, literal strings in the
  1201. Xbody stand for themselves.  There are no escape characters for including
  1202. Xspecial characters.
  1203. X
  1204. XPlaceholders have a special syntax:
  1205. X@display
  1206. X``<'' <placeholder-type> [ : <placeholder-name> ] ``>''
  1207. X@end display
  1208. X(where the square brackets indicate optional parts).  Placeholder names are
  1209. Xusually used to prompt the user for suggestive replacements or context, but
  1210. Xare especially significant for @code{text} placeholders.  Identical
  1211. X@code{text} placeholders within a template are replaced with the same
  1212. Xvalue.  Two placeholders are identical only if all of their fields are
  1213. Xidentical, including their names (if present).
  1214. X@page
  1215. X
  1216. X@group
  1217. XAs mentioned earlier, there are four special forms of placeholders:
  1218. X@table @code
  1219. X@item text
  1220. XMay be replaced by any text not containing a newline.
  1221. X
  1222. X@item textenter
  1223. XSimilar to @code{text}, but saves the result in the identifier completion
  1224. Xtable.
  1225. X
  1226. X@item textlong
  1227. XMay be replaced by any text, including newlines.
  1228. X
  1229. X@item destination (@code{point})
  1230. XRepresents the intended final destination of @i{point}.  These placeholders
  1231. Xare always removed from the template body after expanding.
  1232. X@end table
  1233. X@end group
  1234. X
  1235. X@group
  1236. XAll other placeholders must define templates.  There are six forms of
  1237. Xtemplates:
  1238. X@table @code
  1239. X@item Function
  1240. XThe result of executing the body of the template (written in GNU
  1241. XEmacs Lisp) is inserted in place of the placeholder.
  1242. X
  1243. X@item Lexical
  1244. XSimilar to @code{text}, but checks the result against a regular expression.
  1245. XThe body of the template must be a valid GNU Emacs Lisp regular expression.
  1246. X
  1247. X@item Repetition
  1248. XThese templates must be of the form: ``<separator string> <placeholder>''.
  1249. XThey result in a series of expansions of ``<placeholder>'', separated by
  1250. X``<separator string>''s.  Note that a newline may be used for the separator.
  1251. X
  1252. X@item Selection
  1253. XThe template body must consist of a list of items of the following form:
  1254. X@display
  1255. X``<selection> [ : [ <placeholder> ] ] [ ; comment ]''
  1256. X@end display
  1257. X(where square brackets indicate optional parts).  If there is no ``:'',
  1258. Xthen the ``<selection>'' is considered to be a string replacement for the
  1259. Xplaceholder.  If there is a ``:'' then the item is considered to be a
  1260. Xreference to another placeholder.  In that case, if there is a
  1261. X``<placeholder>'' it is used for the replacement, otherwise the
  1262. X``<selection>'' is used.
  1263. X
  1264. X@item Sequence
  1265. XThis type of template may have literal text and/or placeholders in its body.
  1266. X
  1267. X@item String
  1268. XThis type is similar to @code{sequence}, but may not contain placeholders.
  1269. XIt is parsed more simply (and faster).
  1270. X@end table
  1271. X@end group
  1272. X
  1273. XThe best method for creating new template files is to start with an
  1274. Xexisting template file.  There are several examples of @code{function} type
  1275. Xtemplates in the generic template file.  Examples of other types are
  1276. Xpresent in the Emacs-Lisp template file.
  1277. X
  1278. X@node appendixa, appendixb, details, top
  1279. X@appendix Example Templates for Emacs-Lisp
  1280. X
  1281. X@example
  1282. X@group
  1283. XTemplate arg-type Selection
  1284. X:begin
  1285. Xa    ; Function name
  1286. Xb    ; Buffer name (must exist)
  1287. XB    ; Buffer name (possibly nonexistent)
  1288. Xc    ; Single character
  1289. XC    ; Command name
  1290. Xd    ; Point as a number (no prompt)
  1291. XD    ; Directory name
  1292. Xf    ; File name (must exist)
  1293. XF    ; File name (possibly nonexistent)
  1294. Xk    ; Keystroke sequence (string)
  1295. Xm    ; Mark as a number (no prompt)
  1296. Xn    ; Number (reads a string and converts)
  1297. Xp    ; Prefix arg converted to number
  1298. XP    ; Prefix arg in raw form
  1299. Xr    ; Region (no prompt)
  1300. Xs    ; String
  1301. XS    ; Symbol
  1302. Xv    ; Variable name (must be user-variable-p)
  1303. Xx    ; Lisp expression unevaluated
  1304. XX    ; Lisp expression evaluated
  1305. X:end
  1306. X@end group
  1307. X
  1308. X@group
  1309. XTemplate function Sequence
  1310. X:begin
  1311. X
  1312. X(defun <textenter:function-name> (<text:arguments>)
  1313. X  "<textlong:documentation>"
  1314. X  (interactive "<arg-type><textenter:function-name>: <text:arguments>? ")
  1315. X                    ; Local Variables
  1316. X  (let (<text:local-variables>)
  1317. X                    ; Body
  1318. X    <stmt:body>
  1319. X  ) ; let
  1320. X) ; defun <textenter:function-name>
  1321. X
  1322. X:end
  1323. X@end group
  1324. X
  1325. X@group
  1326. XTemplate functions Repetition
  1327. X:begin
  1328. X
  1329. X<function>
  1330. X:end
  1331. X@end group
  1332. X
  1333. X@group
  1334. XTemplate package Sequence
  1335. X:begin
  1336. X;;; <buffer-name> -- <text:documentation>
  1337. X;;; <user-full-name>, <today>
  1338. X
  1339. X<#variables>
  1340. X<functions>
  1341. X:end
  1342. X@end group
  1343. X
  1344. X@group
  1345. XTemplate stmt Selection
  1346. X:begin
  1347. Xprogn:
  1348. Xcond:
  1349. Xdebug:
  1350. Xife:
  1351. Xif:
  1352. Xwhile:
  1353. Xwhilelist:
  1354. Xsimple:
  1355. X:end
  1356. X@end group
  1357. X
  1358. X@group
  1359. XTemplate whilelist Sequence
  1360. X:begin
  1361. X(while <text:list>
  1362. X  (setq <text:item> (car <text:list>))
  1363. X  (setq <text:list> (cdr <text:list>))
  1364. X  <POINT>
  1365. X) ; while <text:list>
  1366. X:end
  1367. X@end group
  1368. X
  1369. X@end example
  1370. X
  1371. X@node appendixb, , appendixa, top
  1372. X@appendix Example Generic Templates
  1373. X
  1374. X@example
  1375. X@group
  1376. XTemplate buffer-name Function
  1377. X:begin
  1378. X(buffer-name)
  1379. X:end
  1380. X@end group
  1381. X
  1382. X@group
  1383. XTemplate day Function
  1384. X:begin
  1385. X(let ((str (current-time-string)))
  1386. X  (string-match "[0-9]+" str)
  1387. X  (substring str (match-beginning 0) (match-end 0))
  1388. X)
  1389. X:end
  1390. X@end group
  1391. X
  1392. X@group
  1393. XTemplate month Function
  1394. X:begin
  1395. X(let ((str (current-time-string))
  1396. X      prefix)
  1397. X  (setq prefix (substring str 4 7))
  1398. X  (cond
  1399. X    ((equal prefix "Jan")
  1400. X      "January")
  1401. X    ((equal prefix "Feb")
  1402. X      "February")
  1403. X    ((equal prefix "Mar")
  1404. X      "March")
  1405. X    ((equal prefix "Apr")
  1406. X      "April")
  1407. X    ((equal prefix "May")
  1408. X      "May")
  1409. X    ((equal prefix "Jun")
  1410. X      "June")
  1411. X    ((equal prefix "Jul")
  1412. X      "July")
  1413. X    ((equal prefix "Aug")
  1414. X      "August")
  1415. X    ((equal prefix "Sep")
  1416. X      "September")
  1417. X    ((equal prefix "Oct")
  1418. X      "October")
  1419. X    ((equal prefix "Nov")
  1420. X      "November")
  1421. X    ((equal prefix "Dec")
  1422. X      "December")
  1423. X  )
  1424. X)
  1425. X:end
  1426. X@end group
  1427. X
  1428. X@group
  1429. XTemplate today Function
  1430. X:begin
  1431. X(concat "<month>" " " "<day>" ", 19" "<year>")
  1432. X:end
  1433. X@end group
  1434. X
  1435. X@group
  1436. XTemplate user-full-name Function
  1437. X:begin
  1438. X(user-full-name)
  1439. X:end
  1440. X@end group
  1441. X
  1442. X@group
  1443. XTemplate year Function
  1444. X:begin
  1445. X(substring (current-time-string) -2)
  1446. X:end
  1447. X@end group
  1448. X@end example
  1449. SHAR_EOF
  1450. if test 41381 -ne "`wc -c < 'template.texinfo'`"
  1451. then
  1452.     echo shar: "error transmitting 'template.texinfo'" '(should have been 41381 characters)'
  1453. fi
  1454. fi
  1455. exit 0
  1456. #    End of shell archive
  1457.  
  1458.  
  1459.